import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter_yn_goods/config/app_config.dart';
import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:wechat_assets_picker/wechat_assets_picker.dart';
import 'package:flutter_yn_goods/utils/permisson/permission_utils.dart';

/// 相册工具类
/// 用于获取相册图片
class AlbumUtils {
  /// 打开相册选择单张图片
  ///
  /// 返回选中的图片资源 [AssetEntity]
  /// 如果用户取消选择或无权限，则返回null
  static Future<AssetEntity?> pickSingleImage() async {
    // 检查相册权限
    /// if (Platform.isAndroid) {
    ///   final androidInfo = await DeviceInfoPlugin().androidInfo;
    ///   if (androidInfo.version.sdkInt <= 32) {
    ///     use [Permission.storage.status]
    ///   }  else {
    ///     use [Permission.photos.status]
    ///   }
    /// }

    bool hasPermission = await PermissionUtils.checkPermission(
      Permission.photos,
    );

    if (!hasPermission) {
      return null;
    }

    // 打开相册选择器
    final List<AssetEntity>? result = await AssetPicker.pickAssets(
      Get.context!,
      pickerConfig: const AssetPickerConfig(
        maxAssets: 1, // 最多选择1张图片
        requestType: RequestType.image, // 只显示图片
      ),
    );

    // 返回选中的第一张图片，如果没有选择则返回null
    return result?.isNotEmpty == true ? result!.first : null;
  }

  /// 打开相册选择多张图片
  ///
  /// [maxCount] 最大选择数量，默认为9
  /// 返回选中的图片资源列表 [List<AssetEntity>]
  /// 如果用户取消选择或无权限，则返回空列表
  static Future<List<AssetEntity>> pickMultiImages({
    int maxCount = 9,
    List<AssetEntity>? selectedAssets,
  }) async {
    // 检查相册权限
    bool hasPermission = await PermissionUtils.checkPermission(
      Permission.photos,
    );

    if (!hasPermission) {
      return [];
    }

    // 打开相册选择器
    final List<AssetEntity>? result = await AssetPicker.pickAssets(
      Get.context!,
      pickerConfig: AssetPickerConfig(
        maxAssets: maxCount, // 最大选择数量
        requestType: RequestType.image, // 只显示图片
        selectedAssets: selectedAssets, // 已选中的资源
      ),
    );

    // 返回选中的图片列表，如果没有选择则返回空列表
    return result ?? [];
  }

  /// 打开相册选择单个视频
  ///
  /// 返回选中的视频资源 [AssetEntity]
  /// 如果用户取消选择或无权限，则返回null
  static Future<AssetEntity?> pickSingleVideo() async {
    // 检查相册权限
    bool hasPermission = await PermissionUtils.checkPermission(
      Permission.photos,
    );

    if (!hasPermission) {
      return null;
    }

    // 打开相册选择器
    final List<AssetEntity>? result = await AssetPicker.pickAssets(
      Get.context!,
      pickerConfig: const AssetPickerConfig(
        maxAssets: 1, // 最多选择1个视频
        requestType: RequestType.video, // 只显示视频
      ),
    );

    // 返回选中的第一个视频，如果没有选择则返回null
    return result?.isNotEmpty == true ? result!.first : null;
  }

  /// 打开相册选择图片或视频
  ///
  /// [maxCount] 最大选择数量，默认为9
  /// [requestType] 资源类型，默认为图片和视频
  /// 返回选中的资源列表 [List<AssetEntity>]
  /// 如果用户取消选择或无权限，则返回空列表
  static Future<List<AssetEntity>> pickAssets({
    int maxCount = 9,
    RequestType requestType = RequestType.common,
    List<AssetEntity>? selectedAssets,
  }) async {
    // 检查相册权限
    bool hasPermission = await PermissionUtils.checkPermission(
      Permission.photos,
    );

    if (!hasPermission) {
      return [];
    }

    // 打开相册选择器
    final List<AssetEntity>? result = await AssetPicker.pickAssets(
      Get.context!,
      pickerConfig: AssetPickerConfig(
        maxAssets: maxCount, // 最大选择数量
        requestType: requestType, // 资源类型
        selectedAssets: selectedAssets, // 已选中的资源
      ),
    );

    // 返回选中的资源列表，如果没有选择则返回空列表
    return result ?? [];
  }
}
